package com.dishdex.menuhub.module.utils;

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * ClassName:
 * Package: com.dishdex.menuhub.app.util
 * Description:
 *
 * @Author:
 * @Create 2025/8/29 17:53
 * @Version 1.0
 */
public final class BaseUtils {

    private BaseUtils() {
    }

    public static List<String> splitByDollar(String s) {
        if (s == null || s.trim().isEmpty()) {
            return new ArrayList<>();
        }
        return Arrays.asList(s.split("\\$"));
    }

    public static Float splitByAr(String url) {
        // url = https://dishbucket.oss-cn-hangzhou.aliyuncs.com/image/2509/27/aedffb18-1c04-417a-929e-0e3616a1b5bd_4096x2306.png
        float width; // 默认值
        float height; // 默认值
        float ar = -1.0f; // 默认宽高比

        // 使用正则表达式匹配宽度和高度
        Pattern pattern = Pattern.compile("_(\\d+)x(\\d+)\\.");
        Matcher matcher = pattern.matcher(url);

        // 检查是否找到匹配
        if (matcher.find()) {
            width = Float.parseFloat(matcher.group(1));  // 提取宽度
            height = Float.parseFloat(matcher.group(2)); // 提取高度
            ar = width / height;
        }
        return ar;
    }

    // 传入明文，返回32位小写密文
    public static String md5(String plain) throws Exception {
        MessageDigest md = null;

        md = MessageDigest.getInstance("MD5");

        byte[] secretBytes = md.digest(plain.getBytes(StandardCharsets.UTF_8));

        StringBuilder sb = new StringBuilder();
        for (byte b : secretBytes) {
            sb.append(String.format("%02x", b & 0xff));
        }
        return sb.toString();
    }

    /**
     * 判断任意对象是否为空（null、空字符串、空集合、空数组等）
     * <p>
     * 支持类型：
     * - null
     * - CharSequence（String, StringBuilder 等）：长度为0或全为空白字符（可选）
     * - Collection：isEmpty()
     * - Map：isEmpty()
     * - 数组：length == 0
     * - 其他对象：仅判断是否为 null
     *
     * @param obj 待判断的对象
     * @return true 表示“为空”，false 表示“非空”
     */
    public static boolean isEmpty(Object obj) {
        if (obj == null) {
            return true;
        }

        if (obj instanceof CharSequence) {
            return ((CharSequence) obj).length() == 0;
            // 如果你想把空白字符串（如 "   "）也视为“空”，可用：
            // return ((CharSequence) obj).toString().trim().isEmpty();
        }

        if (obj instanceof Collection<?>) {
            return ((Collection<?>) obj).isEmpty();
        }

        if (obj instanceof Map<?, ?>) {
            return ((Map<?, ?>) obj).isEmpty();
        }

        if (obj.getClass().isArray()) {
            return java.lang.reflect.Array.getLength(obj) == 0;
        }

        // 其他对象（如自定义 POJO）仅当为 null 时算空，否则视为非空
        return false;
    }

    public static int currentSeconds() {
        return (int) (System.currentTimeMillis() / 1000);
    }
}
